home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 476-500 / disk_500 / wiconify / wiconify-source.lzh / Source / wMenu.c < prev    next >
C/C++ Source or Header  |  1991-04-25  |  7KB  |  205 lines

  1. /*
  2.  *  WICONIFY    A utility that allows you to iconify any Intuition window
  3.  *              on any screen, and to open WB windows on any screen.
  4.  *
  5.  *  wMenu.c     Definitions and static arrays of menu items.
  6.  *
  7.  *  Copyright 1990 by Davide P. Cervone, all rights reserved.
  8.  *  You may use this code, provided this copyright notice is kept intact.
  9.  */
  10.  
  11. #define INTUITION_PREFERENCES_H             /* don't need 'em */
  12. #include <intuition/intuition.h>
  13. #include "wMenu.h"
  14.  
  15.  
  16. /*
  17.  *  These macros do all the hard work of setting up the static menu
  18.  *  items. 
  19.  */
  20.  
  21. #define CHECK(n,t,c,f,mx)\
  22. {\
  23.    {NEXTMENU(n),MENU_LEFT,MENU_TOP+MENUH*(n+OFFSET),MENU_W,MENUH,\
  24.     (ITEMTEXT|HIGHCOMP|CHECKIT|ITEMENABLED|COMMSEQ)+(f),mx,\
  25.     (APTR)&MENU_NAME[n].IText,NULL,c,NULL,NULL},CHKTEXT(t)\
  26. }
  27.  
  28. #define LABEL(n,t)\
  29. {\
  30.    {NEXTMENU(n),MENU_LEFT,MENU_TOP+MENUH*n,MENU_W,MENUH,\
  31.     (ITEMTEXT|HIGHNONE|ITEMENABLED),0,(APTR)&MENU_NAME[n].IText,\
  32.     NULL,0,NULL,NULL},SUBTEXT(t)\
  33. }
  34.  
  35. #define LABL2(n,t)\
  36. {\
  37.    {NEXTMENU(n),MENU_LEFT,MENU_TOP+MENUH*(n-NS_DEPTH5+NS_DEPTH1),MENU_W,MENUH,\
  38.     (ITEMTEXT|HIGHNONE|ITEMENABLED),0,(APTR)&MENU_NAME[n].IText,\
  39.     NULL,0,NULL,NULL},SUBTEXT(t)\
  40. }
  41.  
  42. #define DEPTH(n,t)\
  43. {\
  44.    {NEXTMENU(n),MENU_LEFT+(n-NS_DEPTH1)*CHARW*3+6,MENU_TOP+MENUH*NS_DEPTH1,\
  45.     CHARW*3,MENUH,(ITEMTEXT|HIGHCOMP|ITEMENABLED),0,\
  46.     (APTR)&MENU_NAME[n].IText,NULL,0,NULL,NULL},DEPTEXT(t)\
  47. }
  48.  
  49. #define SLINE(n,l)\
  50. {\
  51.    {NEXTMENU(n),MENU_LEFT,MENU_TOP+MENUH*n,MENU_W,MENUH,\
  52.     ITEMTEXT|HIGHNONE,~(1<<n),(APTR)&MENU_NAME[n].IText,NULL,0,NULL,NULL},\
  53.     MENUTEXT(l)\
  54. }
  55.  
  56.  
  57. #define MITEM(n,t,c,f,s)\
  58. {\
  59.    {NEXTMENU(n),MENU_L,MENUH*n,MENU_W,MENUH,\
  60.     (ITEMTEXT|HIGHCOMP|COMMSEQ|ITEMENABLED)+(f),~(1<<n),\
  61.     (APTR)&MENU_NAME[n].IText,NULL,c,(struct MenuItem *)s,NULL},\
  62.    MENUTEXT(t)\
  63. }
  64.  
  65. #define MLINE(n,l)\
  66. {\
  67.    {NEXTMENU(n),MENU_L,MENUH*n,MENU_W,MENUH,ITEMTEXT|HIGHNONE,~(1<<n),\
  68.     (APTR)&MENU_NAME[n].IText,NULL,0,NULL,NULL},MENUTEXT(l)\
  69. }
  70.  
  71. static char Line[] = "--------------------";
  72. static struct TextAttr wFont = {"topaz.font",8,FS_NORMAL,0};
  73.  
  74.  
  75. /*
  76.  *  The menus are declared as arrays of menu items, prelinked and 
  77.  *  initialized.  The macros set up all the links, the names, the
  78.  *  command key equivalents, and the mutual excludes.  The data needed
  79.  *  by the macros (MENU_NAME, etc) must be declared at the top of
  80.  *  each menu (and removed at the bottom to avoid macro redefinition warnings)
  81.  */
  82.  
  83. struct wMenuItem OpenWindowMenu[] =
  84. {
  85.      #define MENU_NAME      OpenWindowMenu
  86.      #define MENU_NUM       SCREEN_MENU
  87.      #define MENU_W         MENUW(MAX_OPEN_LEN)
  88.      #define MENU_TOP       (-2*MENUH)
  89.      #define MENU_LEFT      ((NEWSCREEN_LEN+4)*CHARW)
  90.      #define OFFSET         0
  91.      #define NEXTMENU(n)    NEXT(n)
  92.    LABEL(OW_ON,         "On:"),
  93.    CHECK(OW_ACTIVESCRN, "Active Screen", 'A', CHECKED, MX(OW_CURRENTWB)| MX(OW_REALWB)),
  94.    CHECK(OW_CURRENTWB,  "Current WB",    'W', 0, MX(OW_ACTIVESCRN)| MX(OW_REALWB)),
  95.    CHECK(OW_REALWB,     "Real WB",       '=', 0, MX(OW_ACTIVESCRN)| MX(OW_CURRENTWB)),
  96.    SLINE(OW_LINE,&Line[0]),
  97.      #undef NEXTMENU
  98.      #define NEXTMENU(n)   NULL
  99.    CHECK(OW_AUTORESIZE, "Size to Fit",   'S', CHECKED| MENUTOGGLE, 0)
  100.  
  101.      #undef MENU_NAME
  102.      #undef MENU_NUM
  103.      #undef MENU_W
  104.      #undef MENU_TOP
  105.      #undef MENU_LEFT
  106.      #undef OFFSET
  107.      #undef NEXTMENU
  108. };
  109.  
  110. struct wMenuItem NewScreenMenu[] =
  111. {
  112.      #define MENU_NAME      NewScreenMenu
  113.      #define MENU_NUM       SCREEN_MENU
  114.      #define MENU_W         MENUW(MAX_NSCR_LEN)
  115.      #define MENU_TOP       (-MENUH)
  116.      #define MENU_LEFT      ((NEWSCREEN_LEN+4)*CHARW)
  117.      #define OFFSET         (-NS_DEPTH5+NS_DEPTH1)
  118.      #define NEXTMENU(n)    NEXT(n)
  119.    LABEL(NS_DEPTH,      "Depth:"),
  120.    DEPTH(NS_DEPTH1,     "1"),
  121.    DEPTH(NS_DEPTH2,     "2"),
  122.    DEPTH(NS_DEPTH3,     "3"),
  123.    DEPTH(NS_DEPTH4,     "4"),
  124.    DEPTH(NS_DEPTH5,     "5"),
  125.    LABL2(NS_TYPE,       "Type:"),
  126.    CHECK(NS_HIRES,      "HIRES",     'H', CHECKED, MX(NS_LORES)),
  127.    CHECK(NS_LORES,      "LORES",     'L', 0,       MX(NS_HIRES)),
  128.    CHECK(NS_INTERLACE,  "Interlace", 'I', MENUTOGGLE,0),
  129.      #undef NEXTMENU
  130.      #define NEXTMENU(n)   NULL
  131.    CHECK(NS_HAM,        "HAM",       '+', MENUTOGGLE,0),
  132.  
  133.      #undef MENU_NAME
  134.      #undef MENU_NUM
  135.      #undef MENU_W
  136.      #undef NEXTMENU
  137. };
  138.  
  139. struct wMenuItem IconMenu[] =
  140. {
  141.      #define MENU_NAME      IconMenu
  142.      #define MENU_NUM       ICON_MENU
  143.      #define MENU_W         MENUW(MAX_ICON_LEN)
  144.      #define MENU_L         -CHARW
  145.      #define NEXTMENU(n)    NEXT(n)
  146.    MITEM(IM_OPEN,       "Open",     'O',DISABLED,NULL),
  147.    MITEM(IM_CLOSE,      "Close",    'C',DISABLED,NULL),
  148.    MITEM(IM_LOCK,       "Lock",     '#',DISABLED,NULL),
  149.    MITEM(IM_CLEANUP,    "Clean Up", 'K',DISABLED,NULL),
  150.    MLINE(IM_LINE1,&Line[6]),
  151.    MITEM(IM_ORGANIZE,   "Organize", 'R',DISABLED,NULL),
  152.    MITEM(IM_OPENALL,    "Open All", 'P',DISABLED,NULL),
  153.    MLINE(IM_LINE2,&Line[6]),
  154.    MITEM(IM_ABOUT,      "About...", '?',0,NULL),
  155.      #undef NEXTMENU
  156.      #define NEXTMENU(n)   NULL
  157.    MITEM(IM_END,        "End",        0,-COMMSEQ,NULL),
  158.  
  159.      #undef MENU_NAME
  160.      #undef MENU_NUM
  161.      #undef MENU_W
  162.      #undef MENU_L
  163.      #undef NEXTMENU
  164. };
  165.  
  166. struct wMenuItem ScreenMenu[] =
  167. {
  168.      #define MENU_NAME      ScreenMenu
  169.      #define MENU_NUM       SCREEN_MENU
  170.      #define MENU_W         MENUW(MAX_SCRN_LEN)
  171.      #define MENU_L         -4*CHARW
  172.      #define NEXTMENU(n)    NEXT(n)
  173.    MITEM(SM_TOFRONT,    "To Front",     '>',0,NULL),
  174.    MITEM(SM_TOBACK,     "To Back",      '<',0,NULL),
  175.    MITEM(SM_WBTOFRONT,  "WB To Front",  'N',0,NULL),
  176.    MLINE(SM_LINE1,&Line[2]),
  177.    MITEM(SM_TOGGLE,     "Toggle Title", 'T',0,NULL),
  178.    MITEM(SM_ICONIFY,    "Iconify",      '*',0,NULL),
  179.    MLINE(SM_LINE2,&Line[2]),
  180.    MITEM(SM_NEWCLI,     "New CLI",      '.',0,NULL),
  181.    MITEM(SM_MAKEWB,     "Make WB",      'M',0,NULL),
  182.    MITEM(SM_OPENWINDOW, "Open Windows", 0,-COMMSEQ,&OpenWindowMenu[0]),
  183.    MITEM(SM_NEWSCREEN,  "New Screen",   0,-COMMSEQ,&NewScreenMenu[0]),
  184.      #undef NEXTMENU
  185.      #define NEXTMENU(n)   NULL
  186.    MITEM(SM_CLOSESCREEN,"Close Screen", 0,-COMMSEQ,NULL),
  187.  
  188.      #undef MENU_NAME
  189.      #undef MENU_NUM
  190.      #undef MENU_W
  191.      #undef NEXTMENU
  192. };
  193.  
  194.  
  195. #define MENU(i,t,n,l,s)\
  196.    {&wMenu[i+1],l*CHARW+10,0,(n+1)*CHARW,MENUH,MENUENABLED,t,&s[0].Item,0,0,0,0}
  197. #define LAST(i,t,n,l,s)\
  198.    {NULL,l*CHARW+10,0,(n+1)*CHARW,MENUH,MENUENABLED,t,&s[0].Item,0,0,0,0}
  199.  
  200. struct Menu wMenu[] =
  201. {
  202.    MENU(ICON_MENU,   "Icon",   4, 0, IconMenu),
  203.    LAST(SCREEN_MENU, "Screen", 6, 6, ScreenMenu),
  204. };
  205.